/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package controller;

import DAO.ItemPedidoDAO;
import DAO.ProdutoDAO;
import com.google.gson.Gson;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;
import java.util.ArrayList;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import model.ItemPedido;
import model.Mensagem;
import model.Pedido;
import model.Produto;

/**
 *
 * @author Alberto
 */
public class Controller_ItemPedido extends
        HttpServlet {

    public void cadastrar(HttpServletRequest request, HttpServletResponse response)
            throws Exception {

        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();

        ArrayList<Object> obj = new ArrayList<Object>();
        Gson gson = new Gson();
        Mensagem msg = new Mensagem();

        ProdutoDAO produtoDAO = new ProdutoDAO();

        ItemPedido itemPedido = new ItemPedido();
        ItemPedidoDAO itemPedidoDAO = new ItemPedidoDAO();

        Produto produto = new Produto();
        System.out.println(request.getParameter("quantidade"));
        System.out.println(request.getParameter("valor"));
        System.out.println(request.getParameter("pedido"));
        System.out.println(request.getParameter("produto"));
        

        try {
            
            produto.setCodigo(request.getParameter("produto"));

            if (produto.validarProduto(produto.getCodigo()) == true) {
                System.out.println("Está indo para o lugar certo");
                produto = produtoDAO.buscarPorNome(request.getParameter("produto"));
                itemPedido.setProduto(produto);
                

            } else {
                System.out.println("Está indo para o lugar errado");
                throw new Exception("Produto não cadastrado, por favor verificar se o nome está correto.");
            }
            System.out.println(request.getParameter("quantidade"));
            System.out.println(request.getParameter("valor"));
            System.out.println(request.getParameter("pedido"));
            System.out.println(request.getParameter("produto"));
            itemPedido.setQuantidade(Integer.parseInt(request.getParameter("quantidade")));
            Pedido pedido = new Pedido();
            pedido.setId(Integer.parseInt(request.getParameter("pedido")));
            itemPedido.setValor(Double.parseDouble(request.getParameter("valor")));
            itemPedidoDAO.criar(itemPedido, pedido);

            msg.setTipo(1);
            msg.setMensagem("Item cadastrado!!");

            obj.add(msg);

            out.print(gson.toJson(obj));

        } catch (Exception e) {
            msg.setMensagem(e.getMessage());
            msg.setTipo(2);
            obj.add(msg);

            out.print(gson.toJson(obj));
            System.out.println("Erro na servlet " + e.getMessage());

        } finally {
        }

    }

    public void listar(HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();

        ArrayList<ItemPedido> obj = new ArrayList<ItemPedido>();

        Mensagem objmsg = new Mensagem();

        Gson objJson = new Gson();

        try {
            ItemPedidoDAO itemPedidoDAO = new ItemPedidoDAO();
            Pedido pedido = new Pedido();
            pedido.setId(Integer.parseInt(request.getParameter("pedido")));

            obj = itemPedidoDAO.buscarTodas(pedido);

            out.print(objJson.toJson(obj));

        } catch (Exception e) {

            objmsg.setMensagem("Algo não previsto aconteceu, favor verificar se o Produto foi cadastrado!");

            out.print(objJson.toJson(objmsg));

        } finally {
            out.close();
        }

    }

    public void alterar(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException, SQLException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();

        //criar um array list generico
        ArrayList<Object> arrobj = new ArrayList<Object>();

        Mensagem objmsg = new Mensagem();

        Gson objJson = new Gson();

        try {

            ProdutoDAO produtoDAO = new ProdutoDAO();
            Produto produto = new Produto();
            produto.setCodigo(request.getParameter("codigo"));
            produto.setNome(request.getParameter("nome"));
            produto.setQuantidade(Integer.parseInt(request.getParameter("quantidade")));

            if (produtoDAO.atualizar(produto) == true) {
                objmsg.setMensagem("Produto alterado com Sucesso!");
            } else {
                objmsg.setMensagem("Algo não previsto aconteceu, favor verificar se o produto foi alterado!");
            }

            arrobj.add(objmsg);

            out.print(objJson.toJson(arrobj));

        } catch (Exception e) {

            //perceba que a mensagem é gerada na controladora
            objmsg.setMensagem("Algo não previsto aconteceu, favor verificar se o produto foi alterado!!!!!!!!");
            arrobj.add(objmsg);

            out.print(objJson.toJson(arrobj));

        } finally {
            out.close();
        }

    }

    public void buscar_por_id(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException, SQLException {

        PrintWriter out = response.getWriter();
        Gson objJson = new Gson();
        ProdutoDAO dao = new ProdutoDAO();

        ArrayList<Produto> arrobj = new ArrayList<Produto>();

        try {
            System.out.println(request.getParameter("codigo"));
            arrobj.add(dao.buscarLoginByCodigo(request.getParameter("codigo")));
            out.print(objJson.toJson(arrobj));

        } catch (Exception e) {
            System.out.println("Erro ao buscar por ID o login");
        } finally {
            out.close();
        }

    }

    public void apagar(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException, SQLException {
        PrintWriter out = response.getWriter();
        Gson objJson = new Gson();
     
        Mensagem msg = new Mensagem();

        ArrayList<Object> arrobj = new ArrayList<Object>();

        try {
            ItemPedidoDAO itemPedidoDAO = new ItemPedidoDAO();
            itemPedidoDAO.apagar(Integer.parseInt(request.getParameter("id_itemPedido")));
            
            msg.setMensagem("Registro apagado com sucesso!!");
            msg.setTipo(1);
            arrobj.add(msg);
            out.print(objJson.toJson(arrobj));

        } catch (Exception e) {
            msg.setMensagem(e.getMessage());
            msg.setTipo(2);
            arrobj.add(msg);
            out.print(objJson.toJson(arrobj));
            System.out.println("Erro ItemPedido "+e.getMessage());
        } finally {
            out.close();
        }

    }

    public void listarPorPedido(HttpServletRequest request, HttpServletResponse response)
            throws Exception {

        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();

        ArrayList<ItemPedido> obj = new ArrayList<ItemPedido>();

        Mensagem objmsg = new Mensagem();
        Gson objJson = new Gson();

        try {

            ItemPedidoDAO itempedidoDAO = new ItemPedidoDAO();
            obj = itempedidoDAO.buscarPorPedido(Integer.parseInt(request.getParameter("id_pedido")));
            out.print(objJson.toJson(obj));

        } catch (Exception e) {

            objmsg.setMensagem("Algo não previsto aconteceu, favor verificar se o Pedido foi cadastrado!");

            out.print(objJson.toJson(objmsg));

        } finally {
            out.close();
        }

    }

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        int oper = Integer.parseInt(request.getParameter("oper"));
        try {
            switch (oper) {

                case 1:
                    cadastrar(request, response);
                    break;

                case 2:
                    listar(request, response);
                    break;

                case 3:
                    alterar(request, response);
                    break;

                /*       case 4:
                 consultar(request, response);
                 break;*/
                case 5:
                    apagar(request, response);
                    break;
                case 6:
                    buscar_por_id(request, response);
                    break;

                case 7:
                    listarPorPedido(request, response);
                    break;
            }

        } catch (Exception e) {
        }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Handles the HTTP <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

}
